With a constant increase in data volume and computing scale, more and more application programs are choosing to use graphics processing units (GPU) for computational resources. During the process of using a GPU, an operating system is responsible for obtaining low-level GPU hardware details and providing those low-level GPU hardware details to an application program. The application program determines the required GPU resources and requests the required GPU resources from the GPU according to the low-level GPU hardware details.
Some video card manufacturers, such as NVIDIA and AMD, continually release GPUs with new structures for the purpose of increasing video card efficiency. However, the capacities of the newly released video cards are usually so small that a single video card is incapable of meeting the increasing needs of the computational requirements. When there is a need to further improve computational capabilities, coordinative computing by multiple GPUs is usually selected as the compute mode. One of the most common modes is to use one computer with multiple GPUs to coordinate computing large amounts of data.
Since the GPU-based application programs on the market are designed to run on hardware with a single GPU card, programmers need to redesign application programs in order for them run on the hardware structures incorporated within multiple GPUs. These new application programs need to be capable of using hardware resources based on the details of the low level hardware, such as, the video memory capacities, the number of computing units, and the number of GPUs to accommodate the hardware structures of multiple GPUs. Moreover, the application programs need to be redesigned with respect to the different structures of a computer having multiple GPUs. Even though GPU resources can be used more efficiently when there is a specific application program for respective hardware structures, there is a significant cost to have a specific design maintained for each of the hardware structures.